// damage.module.js

// 伤害公式


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*damage.module.js][damage.module.js:1]]
/**
 * 计算单次跳字伤害。
 *
 * @param 技能系数 你释放技能的加成百分比，比如重剑裂地符文描述是500%伤害，那就是×5。
 *
 * @param 攻击伤害加成 就是游戏内描述的攻击伤害增加多少多少。
 * 比如猎术，热血，背袭，职业专精等。
 * 其中描述的最终伤害也是和攻击伤害一样归一类，比如祝融技能，异变猎犬的被动等描述，皆归攻击伤害一类；
 * 弱点伤害增加也是归类在攻击伤害上，近战打出弱点自带额外100%弱点伤害加成，远程则是额外50%弱点伤害加成。30残忍特技加的40%弱点伤害也是归类在这里，叠加。比如你自身特技或者专精加起来只有额外100%攻击伤害，那么就是×2，打出弱点伤害后，近战就是×3，远程×2.5，有30残忍则是近战×3.4，远程×2.9。
 *
 * @param 暴击伤害倍率 就是你的暴击伤害百分比，比如你有100%爆伤，那么暴击之后就是×2。其他什么描述加暴击伤害的都叠加在一起结算。
 *
 * @param 攻击威力系数 目前只有部分职业有，比如重剑的伏诛符文加20%，那就是×1.2，拳甲1技能连续命中加的15%攻击威力，战刀的黄刃状态加10%，红刃加20%；法杖的专精加元素部分攻击威力（物理伤害部分没有）。其余的可能只有普攻威力增加的，只给普攻加。Ps：拳甲斗气暴发后的影子算普攻机制。
 *
 * @param 血石攻击威力系数 这个只有武器的血石有加，没别的地方加了。比如血石克敌描述增加30%攻击威力，那么该技能就×1.3。
 *
 * @param 肉质系数 游戏分三类武器，刃，击，弹。
 * 战刀，双剑，重剑是刃
 * 拳甲，长枪是击
 * 猎铳，弓箭，法杖是弹
 * 肉质星级分布一二三星可以通过巨兽图鉴看到。
 * 其中1星系数为0.85，2星是1，3星是1.15
 * 也就是打在1星肉质就是×0.85，2星×1，3星×1.15
 *
 * @param 易伤系数 这个其实目前只有几个猎魂的魂技才有，比如最常见的阿尔卡多（俗称吸血鬼）的血雾术（潘多拉也有），五星变异就是增加40%易伤，属于debuff，作用在巨兽身上的。也就是×1.4。
 *
 * @param 攻击力 人物面板里显示的攻击力。
 *
 * @param 巨兽护甲减免系数'巨兽的护甲值会随着星级描述越高而变低。
 * 半星最高护甲，一星中等，二星护甲最低。具体数值很难测试出来，只知道了一星巨兽护甲是200左右。
 *
 * @param 元素攻击力 人物面板里显示的当前武器的元素攻击力。
 *
 * @param 巨兽抗性减免系数 抗性值理论上也是这样，但是实际上差距不明显，感觉半星~三星的抗性值都差距不大，但是抗性肯定大于150。
 *
 * @param 魂技元素伤害加成 猎魂技能描述的增加元素伤害是独立的，比如巴尔，亚瑟的元素之怒，增加100%元素伤害就是×2；穷奇的魔鬼契约增加56%，就是×1.56；五个暗之星增加元素伤害100%也是×2。
 *
 * @param 非魂技元素伤害加成 元素武器专属，四元素对应四个元素专精特技，20特技增加50%元素伤害加成，也就是×1.5，料理加的是叠加进去的，比如吃个蘑菇汤加40%，那就是×1.9，鱼子酱则是×2.0。兽潮如果有额外加成也是同类叠加进去。
 *
 * @param 星级系数加成 不同于物理，物理的星级之影响巨兽的护甲。而元素的星级除了抗性之外还有一个独立的系数，那就是星级系数。总共分四级，红叉，半星，一星，二星，三星。系数分别是0，50%，100%，150%，200%。也就是巨兽受到的元素部分伤害加成为：×0、×0.5、×1、×1.5、×2。
 *
 * 其它伤害：
 *
 * - 快速蓄力
 *   快速蓄力特技增加技能威力描述是独立的算的。
 * - 真实伤害
 *   目前就两个职业可以打出，拳甲的1技能符文断骨和猎铳3技能的标记，打出印记之后跳的紫色数值就是真实伤害，该数字的大小取决于你打在印记上的跳字多少，紫色跳字不做二次结算。
 * - 传递伤害
 *   少司命和司羿两个魂技是传递伤害，类似真实伤害这样计算，传递伤害只跟魂技传递的百分比和传递前的伤害跳字有关，传递后不再进行二次结算。
 */
function avg(object){

    /* 共同 */

    let 暴击率=object.暴击率
    let 暴击伤害倍率=object.暴击伤害倍率
    let 攻击伤害加成=object.攻击伤害加成
    let 肢体攻击伤害=object.肢体攻击伤害
    let 易伤系数=object.易伤系数
    let 传递系数=object.传递系数
    let 肉质系数=object.肉质系数
    let 技能符文伤害=object.技能符文伤害

    /* 物理 */

    let 攻击力=object.攻击力
    let 无视护甲后巨兽受到的伤害=object.无视护甲后巨兽受到的伤害

    /* 元素 */

    let 元素攻击力=object.元素攻击力
    let 非魂技元素伤害加成=object.非魂技元素伤害加成
    let 魂技元素伤害加成=object.魂技元素伤害加成
    let 无视抗性后巨兽受到的伤害=object.无视抗性后巨兽受到的伤害
    let 星级系数加成=object.星级系数加成

    return (
        (1+暴击率*暴击伤害倍率)*
        (1+攻击伤害加成)*
        (1+肢体攻击伤害)*
        (1+易伤系数)*
        (1+传递系数)*
        肉质系数*
        技能符文伤害*
        ((
            攻击力*
            无视护甲后巨兽受到的伤害
        )+(
            元素攻击力*
            (1+非魂技元素伤害加成)*
            (1+魂技元素伤害加成)*
            无视抗性后巨兽受到的伤害*
            星级系数加成)))
}

function max(object){
    /* 最大伤害时必暴击，黄字伤害 */
    object.暴击率=1

    return avg(object)
}

function min(object){
    /* 最小伤害时不暴击，白字伤害 */
    object.暴击率=0

    return avg(object)
}

export{avg,max,min}
// damage.module.js:1 ends here
